import 'package:dartkit/dartkit.dart';
import 'package:test/test.dart';

void main() {
  // 这里就是为了测试数据库的
  // 而initConnection中包含了数据库的代码，因此不在这个测试中使用它
  // 只是用更原始的办法
  argPostgres.value = ArgPostgres.local();

  /// 这个名字永远不会存在于数据库中，因此可以与别的测试环境独立开来
  const String uniqueName = "database_unique_test";

  /// 快速判断这个数据库是否存在，依靠名字是否存在来判断
  Future<void> isUniqueExist(bool exist) async {
    List<String> namesDb = await DatabaseKit.databases;
    expect(namesDb.contains(uniqueName), exist);
  }

  test("数据库连接和创建测试", () async {
    // 获取所有数据库，其中找不到独立名字
    await isUniqueExist(false);
    // 现在以这个名字新建一个数据库，就能够找到这个名字了
    await DatabaseKit.create(uniqueName);
    await isUniqueExist(true);
    // 连接数据库，能够顺利连接上
    await expectLater(() async {
      final conn = await DatabaseKit.open(uniqueName);
      await conn.close();
    }, returnsNormally);
    // 删除数据库，发现数据库又不存在了
    await DatabaseKit.delete(uniqueName);
    await isUniqueExist(false);
  });

  test("重复创建", () async {
    // 重复创建同样的数据库，不会报错
    await DatabaseKit.create("double_create");
    await DatabaseKit.create("double_create");
  });

  test("删除不存在", () async {
    // 删除不存在的数据库时，至少不会报错
    await DatabaseKit.delete("none_delete");
  });

  tearDownAll(() async {
    await DatabaseKit.delete("double_create");
  });
}
